package com.itheima.d1_file;

import java.io.File;

/**
 * 目标：掌握File创建对象，代表具体文件的方案。
 * File是java.io.包下的类， File类的对象，用于代表当前操作系统的文件（可以是文件、或文件夹）。
 * 注意：File类只能对文件本身进行操作，不能读写文件里面存储的数据。
 *
 * 注意
 * File对象既可以代表文件、也可以代表文件夹。
 * File封装的对象仅仅是一个路径名，这个路径可以是存在的，也允许是不存在的。
 *
 *  构造器                                         说明
 *public File(String pathname)              根据文件路径创建文件对象
 *public File(String parent, String child)  根据父路径和子路径名字创建文件对象
 *public File(File  parent, String child)   根据父路径对应文件对象和子路径名字创建文件对象
 *
 * 绝对路径：从盘符开始       File file1 = new File(“D:\\itheima\\a.txt”);
 * 相对路径：不带盘符，默认直接到当前工程下的目录寻找文件。     File file3 = new File(“模块名\\a.txt”);
 *
 *  时间：2025年8月21日09:07:49
 */
public class FileTest1 {
    public static void main(String[] args) {
        // 1、创建一个File对象，指代某个具体的文件。
        // 路径分隔符的细节一：反斜杠，一定是两个“\\”。第一个"\"告诉第二个"\"就是一个反斜杠
        // File f1 = new File("D:\\Idea\\resource\\ab.txt"); // 假设只写一个"\"，万一文件名字为nab就变成了“\nab”，那么"\n"变成换行符
        //细节二：改为正斜杠，只需要一个“/”
        // File f1 = new File("D:/Idea/resource/ab.txt");
        //细节三：在路径分隔符那里先用“”隔开，用file调其常量separator也是可以的，这个里面会记住一个分隔符，如果系统用的是正斜杠/或者反斜杠\，会自动取到
        File f1 = new File("D:" + File.separator +"Idea"+File.separator+"resource" + File.separator + "ab.txt");
        System.out.println(f1.exists());
        System.out.println(f1.length()); // 文件大小

        System.out.println("------------------------自己试一试上面三种细节：");
        File zeng1 = new File("D:\\图片\\photo\\笔记本壁纸.jpg");
        System.out.println("zeng1文件的大小： "+zeng1.length());
        //File zeng2 = new File("D:\图片\photo\笔记本壁纸.jpg");   //疑惑：（）里面不打""，直接粘贴，就是只有一个反斜杠："D:\图片\photo\笔记本壁纸.jpg"
        //File zeng2 = new File("\"D:\\图片\\photo\\笔记本壁纸.jpg\"");  //疑惑：（）里面打""再粘贴就是有两个反斜杠："\"D:\\图片\\photo\\笔记本壁纸.jpg\""
        File zeng2 = new File("D:/图片/photo/笔记本壁纸.jpg");
        System.out.println("zeng2文件的大小： "+zeng2.length());
        File zeng3 = new File("D:"+File.separator+"图片"+File.separator+"photo"+File.separator+"笔记本壁纸.jpg");
        System.out.println("zeng3文件的大小： "+zeng3.length());


        //file对象取文件夹的大小，注意：只会取文件夹本身的大小，不会取文件夹包含内容整个的大小
        File f2 = new File("D:\\Idea\\IntelliJIDEA2023.3.2");
        System.out.println(f2.length());

        System.out.println("----------------File对象可以指代一个不存在的文件路径------------------");
        // 注意：File对象可以指代一个不存在的文件路径
        File f3 = new File("D:/Idea/resource/aaaa.txt");
        System.out.println(f3.length());
        System.out.println(f3.exists()); // false

        System.out.println("----------相对路径和绝对路径--------------");
        // 我现在要定位的文件是在模块中，应该怎么定位呢？
        // 绝对路径：带盘符的。缺点：以后把源码模块发给别人，别人需要更改这个绝对路径
        // File f4 = new File("D:\\Idea\\IntelliJIDEA2023.3.2\\Code\\javaseProMax\\Day08File-Io-App\\src\\itheima.txt");

        // 相对路径（重点）：不带盘符，默认是直接去工程下寻找文件的。
        // 弹幕：打包，直接发一整个项目给别人，用到的文件都放在这个包里，用相对路径能直接拿到，绝对路径的话，在别人电脑上打开这个项目包，上哪找文件去，还得重新配置路径
        //弹幕：可能是直接导入的老师的iml，大家可以看一看在run下面edit config有working directory
        //弹幕：在你创建File对象的测试类必须与你创建的文件在一个目录下才能使用相对路径否则应该在相对路径前加上../
        //我也是从黑马的文件里拷贝源码到我的idea路径下面，这个相对路径就不会报错，可以自动找文件，但是我把模块名字改为Day08File-Io-App
        //File f4 = new File("file-io-app\\src\\itheima.txt");

        //我的模块名字和黑马不一样，改一下相对路径
        //File f4 = new File("..src/itheima.txt");    //为什么这样的相对路径不行？
        //File f4 = new File("src\\itheima.txt");     //也不行
        File f4 = new File("Day08File-Io-App\\src\\itheima.txt");     //正常
        System.out.println(f4.length());
    }
}
